#pragma GCC optimize(2)
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <map>
#include <vector>

using namespace std;
using LL = long long;
const int N = 1025, M = 1e5 + 10;

/*
动态规划   f[i]存的是对于值为i的数，要与i进行XOR的值
           如果出现新的值，则将后面所有的f[i + 1], f[i + 2], ... f[500] 都pushback上一个数 这个的总操作次数应该是 500 * 500
           因为 q的范围属于[0, 500]所以最大的XOR值为1023
           所以综合来说时间复杂度应该为 100000 * 250 + 500 * 500

*/

int n;
vector<int> f[N];
bool cont[N][N], st[N][N], res[N];
int q[M];
int cnt = 1;

void solve(){
    res[0] = true;
    cin >> n;

    for(int i = 1; i <= n; i ++) cin >> q[i];


    for(int i = 1; i <= n; i ++){


        int t = q[i];


        if(!res[t]){
            res[t] = true;
            cnt ++;
        }

        for(int j = t + 1; j <= 500; j ++){
            if(!cont[j][t]){
                cont[j][t] = true;
                f[j].push_back(t);
            }else{
                break;
            }
        }

      
        for(int j = 0; j < f[t].size(); j ++){
            int k = (t ^ f[t][j]);

            if(!res[k]){
                res[k] = true;
                cnt ++;
            }

            for(int p = t + 1; p <= 500; p ++){
                if(!cont[p][k]){
                    cont[p][k] = true;
                    f[p].push_back(k);
                }else{
                    break;
                }
            }
        }


    }




    cout << cnt << '\n';
    for(int i = 0; i <= 1023; i ++){
        if(res[i]) cout << i << " ";
    }

    cout << '\n';
}

int main(){
    freopen("in.txt", "r", stdin);
    freopen("out.txt", "w", stdout);
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    solve();

    return 0;
}